// src/api/apiService.ts
import axios, { AxiosInstance } from "axios";
import store from "@/store"; // 引入 Vuex store
import { jwtDecode } from "jwt-decode";
import { UserData } from "@/types/userTypes"; // 导入 UserData 类型（如果需要）

const apiClient: AxiosInstance = axios.create({
  baseURL: "https://api.example.com", // 替换为你的 API 基础 URL
});

// 在请求拦截器中添加 Authorization 头
apiClient.interceptors.request.use(
  (config) => {
    const token = store.getters["users/getAccessToken"]; // 获取 accessToken
    if (token) {
      config.headers["Authorization"] = `Bearer ${token}`; // 添加 Bearer Token
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 检查 Token 是否过期
const isTokenExpired = (token: string): boolean => {
  const decoded: any = jwtDecode(token); // 解码 token
  const currentTime = Math.floor(Date.now() / 1000); // 当前时间（秒）
  return decoded.exp < currentTime;
};

// 获取数据的函数
export const fetchData = async (): Promise<any> => {
  // 将返回类型设置为你的数据类型
  const token = store.getters["users/getAccessToken"];

  if (token && isTokenExpired(token)) {
    console.error("Token 已过期，请重新登录");
    store.dispatch("users/logout"); // 登出用户
    return null; // 或者抛出错误
  }

  try {
    const response = await apiClient.get("/protected-endpoint"); // 你的 API 请求
    return response.data; // 返回数据以供调用者使用
  } catch (error) {
    console.error("API 请求错误:", error);
    throw error; // 抛出错误以便在调用处处理
  }
};
